package com.gaowl.gulimall.product.feign;

import com.gaowl.common.to.SkuReductionTo;
import com.gaowl.common.to.SpuBoundsTo;
import com.gaowl.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 这是一个声明式的远程调用
 * 每次调用 CouponFeignService下的方法时，会远程访问gulimall-coupon微服务下的对应地址的方法
 *
 * @author Wenlong Gao
 * @date 2022/5/10 12:53
 * @since 1.0.0
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {

    /**
     * CouponFeignService.saveSpuBounds(spuBounds)的执行流程：
     *      1) @RequestBody 将这个对象转换为 json格式
     *      2）找到gulimall-coupon服务，准备给 coupon/spubounds/save发送请求。
     *          将上一步转换后的json放在请求体位置，发送请求
     *      3）对方服务收到请求，且请求体中带有json数据
     *          (@RequestBody SpuBoundsEntity spuBounds) 解析 JSON数据为 SpuBoundsEntity对象
     *          只要其中属性的名称是一致的，就可以完成对象解析
     */
    @PostMapping("coupon/spubounds/save")   // 路径从根路径开始，必须保持一致
    R saveSpuBounds(@RequestBody SpuBoundsTo spuBoundsTo);    // 注解不可漏


    @PostMapping("coupon/skufullreduction/saveInfo")
    R saveSkuReductionTo(@RequestBody SkuReductionTo skuReductionTo);
}
